package pong;

import java.awt.Point;
import java.awt.Rectangle;

enum Player {ONE, TWO};

public interface PongModelInterface
{
    /**
     * Moves the specified Player's Paddle in the specified VerticalDirection.
     * This method will only move the Paddle if the Paddle will not go out of
     * the game court.
     * @param dir the VerticalDirection to move the Paddle
     * @param player the Player who's Paddle to move
     */
    public void movePaddle(VerticalDirection dir, Player player);
  
    /**
     * Updates ball location tests for paddle and boundary intersection.
     * @return whether round is completed (some player lost volley)
     */
    public boolean update();   
    
    /**
     * Returns the specified Player's score
     * @param player the player who's score to get
     * @return the score of the specified player
     */
    public int getScore(Player player); 
    
    /**
     * Gets the Top Left Coordinate of the Ball's current coordinates
     * @return the ball's Top Left coordinate
     */
    public Point getBallLocation();
    
    /**
     * Returns the ball's size
     * @return the size of the ball
     */
    public int getBallSize();
    
    /**
     * Gets the height of the specified player's paddle
     * @return the height of the paddle 
     */
    public int getPaddleHeight(Player player);
    
    /**
     * Gets the width of the specified player's paddle
     * @return the width of the paddle
     */
    public int getPaddleWidth(Player player);
    
    /**
     * Gets the specified Player's top left coordinate of his Paddle
     * @param player the player who's Paddle to get
     * @return a Point representing the coordinates of the top left coordinate 
     * of the Paddle
     */
    public Point getPaddleLocation(Player player);
    
    /**
     * Returns the game Court
     * @return a Rectangle representing our game court
     */
    public Rectangle getPongCourt();
}